{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "everyday-calibration",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd \n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from sklearn.datasets import make_blobs\n",
    "\n",
    "#windows 中文编码\n",
    "\n",
    "# 解决坐标轴刻度负号乱码\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 解决中文乱码问题\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "restricted-buffer",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Channel</th>\n",
       "      <th>Region</th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>12669</td>\n",
       "      <td>9656</td>\n",
       "      <td>7561</td>\n",
       "      <td>214</td>\n",
       "      <td>2674</td>\n",
       "      <td>1338</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>7057</td>\n",
       "      <td>9810</td>\n",
       "      <td>9568</td>\n",
       "      <td>1762</td>\n",
       "      <td>3293</td>\n",
       "      <td>1776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>6353</td>\n",
       "      <td>8808</td>\n",
       "      <td>7684</td>\n",
       "      <td>2405</td>\n",
       "      <td>3516</td>\n",
       "      <td>7844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>13265</td>\n",
       "      <td>1196</td>\n",
       "      <td>4221</td>\n",
       "      <td>6404</td>\n",
       "      <td>507</td>\n",
       "      <td>1788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>22615</td>\n",
       "      <td>5410</td>\n",
       "      <td>7198</td>\n",
       "      <td>3915</td>\n",
       "      <td>1777</td>\n",
       "      <td>5185</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Channel  Region  Fresh  Milk  Grocery  Frozen  Detergents_Paper  Delicassen\n",
       "0        2       3  12669  9656     7561     214              2674        1338\n",
       "1        2       3   7057  9810     9568    1762              3293        1776\n",
       "2        2       3   6353  8808     7684    2405              3516        7844\n",
       "3        1       3  13265  1196     4221    6404               507        1788\n",
       "4        2       3  22615  5410     7198    3915              1777        5185"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "df = pd.read_csv(\"./Wholesale customers data.csv\")\n",
    "df.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "german-bottom",
   "metadata": {
    "code_folding": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 440 entries, 0 to 439\n",
      "Data columns (total 8 columns):\n",
      " #   Column            Non-Null Count  Dtype\n",
      "---  ------            --------------  -----\n",
      " 0   Channel           440 non-null    int64\n",
      " 1   Region            440 non-null    int64\n",
      " 2   Fresh             440 non-null    int64\n",
      " 3   Milk              440 non-null    int64\n",
      " 4   Grocery           440 non-null    int64\n",
      " 5   Frozen            440 non-null    int64\n",
      " 6   Detergents_Paper  440 non-null    int64\n",
      " 7   Delicassen        440 non-null    int64\n",
      "dtypes: int64(8)\n",
      "memory usage: 27.6 KB\n"
     ]
    }
   ],
   "source": [
    "#查看数据缺失值---数据并没有缺失值，数据完整性比较好\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "blessed-valuable",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(440, 8)"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "selected-interface",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "id": "sixth-territory",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Normalizer()"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "std"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "id": "chinese-columbus",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Channel</th>\n",
       "      <th>Region</th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>440.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.322727</td>\n",
       "      <td>2.543182</td>\n",
       "      <td>12000.297727</td>\n",
       "      <td>5796.265909</td>\n",
       "      <td>7951.277273</td>\n",
       "      <td>3071.931818</td>\n",
       "      <td>2881.493182</td>\n",
       "      <td>1524.870455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.468052</td>\n",
       "      <td>0.774272</td>\n",
       "      <td>12647.328865</td>\n",
       "      <td>7380.377175</td>\n",
       "      <td>9503.162829</td>\n",
       "      <td>4854.673333</td>\n",
       "      <td>4767.854448</td>\n",
       "      <td>2820.105937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>55.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3127.750000</td>\n",
       "      <td>1533.000000</td>\n",
       "      <td>2153.000000</td>\n",
       "      <td>742.250000</td>\n",
       "      <td>256.750000</td>\n",
       "      <td>408.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>8504.000000</td>\n",
       "      <td>3627.000000</td>\n",
       "      <td>4755.500000</td>\n",
       "      <td>1526.000000</td>\n",
       "      <td>816.500000</td>\n",
       "      <td>965.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>16933.750000</td>\n",
       "      <td>7190.250000</td>\n",
       "      <td>10655.750000</td>\n",
       "      <td>3554.250000</td>\n",
       "      <td>3922.000000</td>\n",
       "      <td>1820.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>112151.000000</td>\n",
       "      <td>73498.000000</td>\n",
       "      <td>92780.000000</td>\n",
       "      <td>60869.000000</td>\n",
       "      <td>40827.000000</td>\n",
       "      <td>47943.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Channel      Region          Fresh          Milk       Grocery  \\\n",
       "count  440.000000  440.000000     440.000000    440.000000    440.000000   \n",
       "mean     1.322727    2.543182   12000.297727   5796.265909   7951.277273   \n",
       "std      0.468052    0.774272   12647.328865   7380.377175   9503.162829   \n",
       "min      1.000000    1.000000       3.000000     55.000000      3.000000   \n",
       "25%      1.000000    2.000000    3127.750000   1533.000000   2153.000000   \n",
       "50%      1.000000    3.000000    8504.000000   3627.000000   4755.500000   \n",
       "75%      2.000000    3.000000   16933.750000   7190.250000  10655.750000   \n",
       "max      2.000000    3.000000  112151.000000  73498.000000  92780.000000   \n",
       "\n",
       "             Frozen  Detergents_Paper    Delicassen  \n",
       "count    440.000000        440.000000    440.000000  \n",
       "mean    3071.931818       2881.493182   1524.870455  \n",
       "std     4854.673333       4767.854448   2820.105937  \n",
       "min       25.000000          3.000000      3.000000  \n",
       "25%      742.250000        256.750000    408.250000  \n",
       "50%     1526.000000        816.500000    965.500000  \n",
       "75%     3554.250000       3922.000000   1820.250000  \n",
       "max    60869.000000      40827.000000  47943.000000  "
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "id": "super-excellence",
   "metadata": {},
   "outputs": [],
   "source": [
    "#数据预处理\n",
    "#在此使用Normalizer---使用方法同MinMaxScaler、StandardScaler\n",
    "from sklearn.preprocessing import Normalizer "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "id": "civic-smoke",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1.11821406e-04, 1.67732109e-04, 7.08332695e-01, ...,\n",
       "        1.19648904e-02, 1.49505220e-01, 7.48085205e-02],\n",
       "       [1.25321880e-04, 1.87982820e-04, 4.42198253e-01, ...,\n",
       "        1.10408576e-01, 2.06342475e-01, 1.11285829e-01],\n",
       "       [1.24839188e-04, 1.87258782e-04, 3.96551681e-01, ...,\n",
       "        1.50119124e-01, 2.19467293e-01, 4.89619296e-01],\n",
       "       ...,\n",
       "       [5.01633106e-05, 7.52449659e-05, 3.64461533e-01, ...,\n",
       "        1.09606834e-02, 3.72236846e-01, 4.68274505e-02],\n",
       "       [9.11309417e-05, 2.73392825e-04, 9.37737390e-01, ...,\n",
       "        9.45939175e-02, 1.53099982e-02, 1.93653251e-01],\n",
       "       [2.41225630e-04, 7.23676891e-04, 6.72295832e-01, ...,\n",
       "        1.56796660e-02, 1.15064626e-01, 1.25437328e-02]])"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "std = Normalizer().fit(df)\n",
    "df2 = std.transform(df)\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "id": "tropical-tracker",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#适用轮廓系数找到最优K¶\n",
    "from sklearn.cluster import KMeans \n",
    "from sklearn.metrics import silhouette_score #轮廓系数\n",
    "\n",
    "score=[] #轮廓系数\n",
    "#将k值获取最大的\n",
    "for i in range(2,20):\n",
    "    cluster = KMeans(n_clusters=i, random_state=0).fit(df)\n",
    "    score.append(silhouette_score(df,cluster.labels_))\n",
    "plt.plot(range(2,20),score)\n",
    "plt.xlabel('k')\n",
    "plt.ylabel('轮廓系数')\n",
    "#请补全代码（25分）\n",
    "plt.axvline(pd.DataFrame(score).idxmax()[0]+2,ls=':')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "id": "behind-microphone",
   "metadata": {
    "code_folding": [
     0
    ]
   },
   "outputs": [],
   "source": [
    "#建模分类（3类）\n",
    "#请补全代码（25分）\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "id": "selected-trick",
   "metadata": {},
   "outputs": [],
   "source": [
    " cluster = KMeans(n_clusters=3, random_state=0).fit(df)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "apparent-million",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4764089086483815"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "  silhouette_score(df,cluster.labels_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "heated-interval",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,\n",
       "       2, 0, 2, 1, 1, 1, 0, 2, 1, 1, 1, 2, 1, 1, 2, 1, 0, 2, 2, 1, 1, 0,\n",
       "       1, 0, 0, 0, 1, 0, 1, 1, 2, 1, 2, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 2,\n",
       "       1, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 1, 1, 1, 1, 1, 0,\n",
       "       1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, 2, 1, 1, 1, 1,\n",
       "       1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,\n",
       "       2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,\n",
       "       1, 1, 0, 0, 2, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1,\n",
       "       1, 0, 0, 1, 0, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2,\n",
       "       1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1,\n",
       "       1, 0, 1, 2, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1,\n",
       "       1, 0, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 1, 0, 1, 0,\n",
       "       1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1,\n",
       "       1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1,\n",
       "       1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       0, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 0, 1, 1],\n",
       "      dtype=int32)"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster.labels_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "close-express",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = cluster.predict(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "descending-bathroom",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 440 entries, 0 to 439\n",
      "Data columns (total 8 columns):\n",
      " #   Column            Non-Null Count  Dtype\n",
      "---  ------            --------------  -----\n",
      " 0   Channel           440 non-null    int64\n",
      " 1   Region            440 non-null    int64\n",
      " 2   Fresh             440 non-null    int64\n",
      " 3   Milk              440 non-null    int64\n",
      " 4   Grocery           440 non-null    int64\n",
      " 5   Frozen            440 non-null    int64\n",
      " 6   Detergents_Paper  440 non-null    int64\n",
      " 7   Delicassen        440 non-null    int64\n",
      "dtypes: int64(8)\n",
      "memory usage: 27.6 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "quick-barcelona",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "accredited-founder",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Channel</th>\n",
       "      <th>Region</th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>12669</td>\n",
       "      <td>9656</td>\n",
       "      <td>7561</td>\n",
       "      <td>214</td>\n",
       "      <td>2674</td>\n",
       "      <td>1338</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>7057</td>\n",
       "      <td>9810</td>\n",
       "      <td>9568</td>\n",
       "      <td>1762</td>\n",
       "      <td>3293</td>\n",
       "      <td>1776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>6353</td>\n",
       "      <td>8808</td>\n",
       "      <td>7684</td>\n",
       "      <td>2405</td>\n",
       "      <td>3516</td>\n",
       "      <td>7844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>13265</td>\n",
       "      <td>1196</td>\n",
       "      <td>4221</td>\n",
       "      <td>6404</td>\n",
       "      <td>507</td>\n",
       "      <td>1788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>22615</td>\n",
       "      <td>5410</td>\n",
       "      <td>7198</td>\n",
       "      <td>3915</td>\n",
       "      <td>1777</td>\n",
       "      <td>5185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>435</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>29703</td>\n",
       "      <td>12051</td>\n",
       "      <td>16027</td>\n",
       "      <td>13135</td>\n",
       "      <td>182</td>\n",
       "      <td>2204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>436</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>39228</td>\n",
       "      <td>1431</td>\n",
       "      <td>764</td>\n",
       "      <td>4510</td>\n",
       "      <td>93</td>\n",
       "      <td>2346</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>437</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>14531</td>\n",
       "      <td>15488</td>\n",
       "      <td>30243</td>\n",
       "      <td>437</td>\n",
       "      <td>14841</td>\n",
       "      <td>1867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>438</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>10290</td>\n",
       "      <td>1981</td>\n",
       "      <td>2232</td>\n",
       "      <td>1038</td>\n",
       "      <td>168</td>\n",
       "      <td>2125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>439</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>2787</td>\n",
       "      <td>1698</td>\n",
       "      <td>2510</td>\n",
       "      <td>65</td>\n",
       "      <td>477</td>\n",
       "      <td>52</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>440 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Channel  Region  Fresh   Milk  Grocery  Frozen  Detergents_Paper  \\\n",
       "0          2       3  12669   9656     7561     214              2674   \n",
       "1          2       3   7057   9810     9568    1762              3293   \n",
       "2          2       3   6353   8808     7684    2405              3516   \n",
       "3          1       3  13265   1196     4221    6404               507   \n",
       "4          2       3  22615   5410     7198    3915              1777   \n",
       "..       ...     ...    ...    ...      ...     ...               ...   \n",
       "435        1       3  29703  12051    16027   13135               182   \n",
       "436        1       3  39228   1431      764    4510                93   \n",
       "437        2       3  14531  15488    30243     437             14841   \n",
       "438        1       3  10290   1981     2232    1038               168   \n",
       "439        1       3   2787   1698     2510      65               477   \n",
       "\n",
       "     Delicassen  \n",
       "0          1338  \n",
       "1          1776  \n",
       "2          7844  \n",
       "3          1788  \n",
       "4          5185  \n",
       "..          ...  \n",
       "435        2204  \n",
       "436        2346  \n",
       "437        1867  \n",
       "438        2125  \n",
       "439          52  \n",
       "\n",
       "[440 rows x 8 columns]"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "going-silly",
   "metadata": {},
   "outputs": [],
   "source": [
    "X['source'] = y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "superior-example",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Channel</th>\n",
       "      <th>Region</th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "      <th>source</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>12669</td>\n",
       "      <td>9656</td>\n",
       "      <td>7561</td>\n",
       "      <td>214</td>\n",
       "      <td>2674</td>\n",
       "      <td>1338</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>7057</td>\n",
       "      <td>9810</td>\n",
       "      <td>9568</td>\n",
       "      <td>1762</td>\n",
       "      <td>3293</td>\n",
       "      <td>1776</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>6353</td>\n",
       "      <td>8808</td>\n",
       "      <td>7684</td>\n",
       "      <td>2405</td>\n",
       "      <td>3516</td>\n",
       "      <td>7844</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>13265</td>\n",
       "      <td>1196</td>\n",
       "      <td>4221</td>\n",
       "      <td>6404</td>\n",
       "      <td>507</td>\n",
       "      <td>1788</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>22615</td>\n",
       "      <td>5410</td>\n",
       "      <td>7198</td>\n",
       "      <td>3915</td>\n",
       "      <td>1777</td>\n",
       "      <td>5185</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>435</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>29703</td>\n",
       "      <td>12051</td>\n",
       "      <td>16027</td>\n",
       "      <td>13135</td>\n",
       "      <td>182</td>\n",
       "      <td>2204</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>436</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>39228</td>\n",
       "      <td>1431</td>\n",
       "      <td>764</td>\n",
       "      <td>4510</td>\n",
       "      <td>93</td>\n",
       "      <td>2346</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>437</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>14531</td>\n",
       "      <td>15488</td>\n",
       "      <td>30243</td>\n",
       "      <td>437</td>\n",
       "      <td>14841</td>\n",
       "      <td>1867</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>438</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>10290</td>\n",
       "      <td>1981</td>\n",
       "      <td>2232</td>\n",
       "      <td>1038</td>\n",
       "      <td>168</td>\n",
       "      <td>2125</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>439</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>2787</td>\n",
       "      <td>1698</td>\n",
       "      <td>2510</td>\n",
       "      <td>65</td>\n",
       "      <td>477</td>\n",
       "      <td>52</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>440 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Channel  Region  Fresh   Milk  Grocery  Frozen  Detergents_Paper  \\\n",
       "0          2       3  12669   9656     7561     214              2674   \n",
       "1          2       3   7057   9810     9568    1762              3293   \n",
       "2          2       3   6353   8808     7684    2405              3516   \n",
       "3          1       3  13265   1196     4221    6404               507   \n",
       "4          2       3  22615   5410     7198    3915              1777   \n",
       "..       ...     ...    ...    ...      ...     ...               ...   \n",
       "435        1       3  29703  12051    16027   13135               182   \n",
       "436        1       3  39228   1431      764    4510                93   \n",
       "437        2       3  14531  15488    30243     437             14841   \n",
       "438        1       3  10290   1981     2232    1038               168   \n",
       "439        1       3   2787   1698     2510      65               477   \n",
       "\n",
       "     Delicassen  source  \n",
       "0          1338       1  \n",
       "1          1776       1  \n",
       "2          7844       1  \n",
       "3          1788       1  \n",
       "4          5185       2  \n",
       "..          ...     ...  \n",
       "435        2204       2  \n",
       "436        2346       2  \n",
       "437        1867       0  \n",
       "438        2125       1  \n",
       "439          52       1  \n",
       "\n",
       "[440 rows x 9 columns]"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "id": "authorized-nightmare",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "      <th>source</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12669</td>\n",
       "      <td>9656</td>\n",
       "      <td>7561</td>\n",
       "      <td>214</td>\n",
       "      <td>2674</td>\n",
       "      <td>1338</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7057</td>\n",
       "      <td>9810</td>\n",
       "      <td>9568</td>\n",
       "      <td>1762</td>\n",
       "      <td>3293</td>\n",
       "      <td>1776</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>6353</td>\n",
       "      <td>8808</td>\n",
       "      <td>7684</td>\n",
       "      <td>2405</td>\n",
       "      <td>3516</td>\n",
       "      <td>7844</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>13265</td>\n",
       "      <td>1196</td>\n",
       "      <td>4221</td>\n",
       "      <td>6404</td>\n",
       "      <td>507</td>\n",
       "      <td>1788</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>22615</td>\n",
       "      <td>5410</td>\n",
       "      <td>7198</td>\n",
       "      <td>3915</td>\n",
       "      <td>1777</td>\n",
       "      <td>5185</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>435</th>\n",
       "      <td>29703</td>\n",
       "      <td>12051</td>\n",
       "      <td>16027</td>\n",
       "      <td>13135</td>\n",
       "      <td>182</td>\n",
       "      <td>2204</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>436</th>\n",
       "      <td>39228</td>\n",
       "      <td>1431</td>\n",
       "      <td>764</td>\n",
       "      <td>4510</td>\n",
       "      <td>93</td>\n",
       "      <td>2346</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>437</th>\n",
       "      <td>14531</td>\n",
       "      <td>15488</td>\n",
       "      <td>30243</td>\n",
       "      <td>437</td>\n",
       "      <td>14841</td>\n",
       "      <td>1867</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>438</th>\n",
       "      <td>10290</td>\n",
       "      <td>1981</td>\n",
       "      <td>2232</td>\n",
       "      <td>1038</td>\n",
       "      <td>168</td>\n",
       "      <td>2125</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>439</th>\n",
       "      <td>2787</td>\n",
       "      <td>1698</td>\n",
       "      <td>2510</td>\n",
       "      <td>65</td>\n",
       "      <td>477</td>\n",
       "      <td>52</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>440 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Fresh   Milk  Grocery  Frozen  Detergents_Paper  Delicassen  source\n",
       "0    12669   9656     7561     214              2674        1338       1\n",
       "1     7057   9810     9568    1762              3293        1776       1\n",
       "2     6353   8808     7684    2405              3516        7844       1\n",
       "3    13265   1196     4221    6404               507        1788       1\n",
       "4    22615   5410     7198    3915              1777        5185       2\n",
       "..     ...    ...      ...     ...               ...         ...     ...\n",
       "435  29703  12051    16027   13135               182        2204       2\n",
       "436  39228   1431      764    4510                93        2346       2\n",
       "437  14531  15488    30243     437             14841        1867       0\n",
       "438  10290   1981     2232    1038               168        2125       1\n",
       "439   2787   1698     2510      65               477          52       1\n",
       "\n",
       "[440 rows x 7 columns]"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = X.iloc[:,2:]\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "familiar-columbia",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "id": "collect-iraqi",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>source</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>410855</td>\n",
       "      <td>949257</td>\n",
       "      <td>1433009</td>\n",
       "      <td>104460</td>\n",
       "      <td>641558</td>\n",
       "      <td>115844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2736049</td>\n",
       "      <td>1239805</td>\n",
       "      <td>1689913</td>\n",
       "      <td>845334</td>\n",
       "      <td>564348</td>\n",
       "      <td>372786</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2133227</td>\n",
       "      <td>361295</td>\n",
       "      <td>375640</td>\n",
       "      <td>401856</td>\n",
       "      <td>61951</td>\n",
       "      <td>182313</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Fresh     Milk  Grocery  Frozen  Detergents_Paper  Delicassen\n",
       "source                                                                 \n",
       "0        410855   949257  1433009  104460            641558      115844\n",
       "1       2736049  1239805  1689913  845334            564348      372786\n",
       "2       2133227   361295   375640  401856             61951      182313"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfs = X.groupby('source').sum()\n",
    "dfs = dfs\n",
    "dfs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "animated-kidney",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "      <th>source</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12669</td>\n",
       "      <td>9656</td>\n",
       "      <td>7561</td>\n",
       "      <td>214</td>\n",
       "      <td>2674</td>\n",
       "      <td>1338</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7057</td>\n",
       "      <td>9810</td>\n",
       "      <td>9568</td>\n",
       "      <td>1762</td>\n",
       "      <td>3293</td>\n",
       "      <td>1776</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>6353</td>\n",
       "      <td>8808</td>\n",
       "      <td>7684</td>\n",
       "      <td>2405</td>\n",
       "      <td>3516</td>\n",
       "      <td>7844</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>13265</td>\n",
       "      <td>1196</td>\n",
       "      <td>4221</td>\n",
       "      <td>6404</td>\n",
       "      <td>507</td>\n",
       "      <td>1788</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>22615</td>\n",
       "      <td>5410</td>\n",
       "      <td>7198</td>\n",
       "      <td>3915</td>\n",
       "      <td>1777</td>\n",
       "      <td>5185</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>435</th>\n",
       "      <td>29703</td>\n",
       "      <td>12051</td>\n",
       "      <td>16027</td>\n",
       "      <td>13135</td>\n",
       "      <td>182</td>\n",
       "      <td>2204</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>436</th>\n",
       "      <td>39228</td>\n",
       "      <td>1431</td>\n",
       "      <td>764</td>\n",
       "      <td>4510</td>\n",
       "      <td>93</td>\n",
       "      <td>2346</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>437</th>\n",
       "      <td>14531</td>\n",
       "      <td>15488</td>\n",
       "      <td>30243</td>\n",
       "      <td>437</td>\n",
       "      <td>14841</td>\n",
       "      <td>1867</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>438</th>\n",
       "      <td>10290</td>\n",
       "      <td>1981</td>\n",
       "      <td>2232</td>\n",
       "      <td>1038</td>\n",
       "      <td>168</td>\n",
       "      <td>2125</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>439</th>\n",
       "      <td>2787</td>\n",
       "      <td>1698</td>\n",
       "      <td>2510</td>\n",
       "      <td>65</td>\n",
       "      <td>477</td>\n",
       "      <td>52</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>440 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Fresh   Milk  Grocery  Frozen  Detergents_Paper  Delicassen  source\n",
       "0    12669   9656     7561     214              2674        1338       1\n",
       "1     7057   9810     9568    1762              3293        1776       1\n",
       "2     6353   8808     7684    2405              3516        7844       1\n",
       "3    13265   1196     4221    6404               507        1788       1\n",
       "4    22615   5410     7198    3915              1777        5185       2\n",
       "..     ...    ...      ...     ...               ...         ...     ...\n",
       "435  29703  12051    16027   13135               182        2204       2\n",
       "436  39228   1431      764    4510                93        2346       2\n",
       "437  14531  15488    30243     437             14841        1867       0\n",
       "438  10290   1981     2232    1038               168        2125       1\n",
       "439   2787   1698     2510      65               477          52       1\n",
       "\n",
       "[440 rows x 7 columns]"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "id": "political-capture",
   "metadata": {},
   "outputs": [],
   "source": [
    "dfsres2 = dfs.div(X.iloc[:,:-1].sum(),axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "id": "pharmaceutical-current",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>source</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.077812</td>\n",
       "      <td>0.372206</td>\n",
       "      <td>0.409599</td>\n",
       "      <td>0.077283</td>\n",
       "      <td>0.506018</td>\n",
       "      <td>0.172658</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.518178</td>\n",
       "      <td>0.486130</td>\n",
       "      <td>0.483031</td>\n",
       "      <td>0.625409</td>\n",
       "      <td>0.445120</td>\n",
       "      <td>0.555615</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.404010</td>\n",
       "      <td>0.141664</td>\n",
       "      <td>0.107370</td>\n",
       "      <td>0.297308</td>\n",
       "      <td>0.048863</td>\n",
       "      <td>0.271727</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Fresh      Milk   Grocery    Frozen  Detergents_Paper  Delicassen\n",
       "source                                                                      \n",
       "0       0.077812  0.372206  0.409599  0.077283          0.506018    0.172658\n",
       "1       0.518178  0.486130  0.483031  0.625409          0.445120    0.555615\n",
       "2       0.404010  0.141664  0.107370  0.297308          0.048863    0.271727"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfsres2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "id": "public-apache",
   "metadata": {},
   "outputs": [],
   "source": [
    "rate = X.source.value_counts()/len(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "contrary-curve",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    0.745455\n",
       "2    0.134091\n",
       "0    0.120455\n",
       "Name: source, dtype: float64"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "id": "funny-paradise",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "#绘制饼状图\n",
    "#请补全代码（10分）\n",
    "labels = ['1','2','0']\n",
    "\n",
    "ax=rate.plot.pie(autopct='%.1f%%',labels = labels,figsize=(8,8),colormap='cool')\n",
    "ax.set_ylabel('')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "celtic-telling",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Fresh</th>\n",
       "      <th>Milk</th>\n",
       "      <th>Grocery</th>\n",
       "      <th>Frozen</th>\n",
       "      <th>Detergents_Paper</th>\n",
       "      <th>Delicassen</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>source</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.077812</td>\n",
       "      <td>0.372206</td>\n",
       "      <td>0.409599</td>\n",
       "      <td>0.077283</td>\n",
       "      <td>0.506018</td>\n",
       "      <td>0.172658</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Fresh      Milk   Grocery    Frozen  Detergents_Paper  Delicassen\n",
       "source                                                                      \n",
       "0       0.077812  0.372206  0.409599  0.077283          0.506018    0.172658"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfsres2[dfsres2.index==0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "substantial-briefs",
   "metadata": {},
   "outputs": [],
   "source": [
    "#绘制条形图\n",
    "#请补全代码（10分）\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "better-andorra",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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dOlCly5d2L17N1u3bqW+vp6zzjoLgEMPPbTp+IULFyYSTmBASWpjcrks/M033+TOO+9k8uTJnHbaaUyfPp277rqrqSN5586def311wGIMdKvXz/OOussRowYQWVlJQUFBdTX13+kc3l1dTUPPfQQBx30z6cuAwYM4J577qFz584sXboU2HfH8w+ue9hhhxFCYNWqVdx4443k5eVRWFjI2WefnfF7vOKKK3jmmWeoq6trun353HPPsXPnTnbt2kWXLl3o1q0bffv25cEHH+SNN97Y6zZikl3Z7cUnSRn4wQ9+wFe+8hWmTp3K7Nmzue+++zj11FNZvnw5PXv2BODss89myZIlDBkyhBdffJEFCxZw7bXXMnToUB588EGOOuqoFs/du3dvCgsLGTVqFHPnzuW9997jmmuu4Wtf+xqDBg3a74ykvLyckSNHMmZMwyLqY445hjPOOINTTz31Y2dQLRk/fjyDBg3iqquuYseOHQAcddRRnHfeeUyYMIFrr72Wgw46iEWLFnHaaadx+umn061btwO6RqbsZt4O2Ytvb5+om3neBa0+9sTePVt13J1L3m31Ne1m3jZNmDCB3bt307lzZw4//HB++ctf7nXbLNeaP+P6JA6km7m3+CQpx+65556snv/+++//yPe3Jk6cyLx58/ZxxN6SCqcDZUBJUjv31a9+la9+9au5LuOA+QxKkpRKBpQkKZW8xSepTfkkizlaks0FHvpknEFJ0n5k2iwWaOoi8WFz5szJUmXtmwElSRnIpFnsvtx4441Zqqp9M6AkKUMf1yz243x4VrVt2zbGjRvHkCFDmD59Ou+//z6bN29mxIgRFBcXs2jRIqChTdLw4cMZNGhQ06ytpX1//etfKSkpoaioiFtuuaXpetdeey2DBw/mzDPPTPiv8OkxoCTpAHTt2pXrr7+eAQMG8PDDD7N582bWr1+f8fFXXXUVpaWl1NTU0LdvXzZu3Mg//vEPvv/973P//fdz9913A7By5UomTZrE448/zrHHHrvPffPnz6eiooJHHnmEa665hg+aL+Tl5fHYY4/xzjvvNPUAbGsMKEk6AB9uFltSUsKLL77ISy+9lPHxzz33HIMHDwYawuXoo4/m0EMPZenSpXzrW99i9+7dAEyZMoWnn36a8ePHN7UcamnfX//6V6644grGjBnDe++9x6uvvgrQ1Gj2yCOPZM+ePUm9/U+Vq/ikduSTtLnS/u2vWWwmjj/+eGpqajj22GMpLy/n/PPP5+abb2b+/PkUFhY2dUWvqqpiwYIF9OnTh2OOOYaLLrqoxX19+/bl+uuvp3fv3vzoRz/iM5/5DJBs09ZcMaAktSm5Whb+gx/8gB/96EdMnTqVmTNnUlZWxk033URBQQG33357xudZuHAhU6dOZdmyZXzpS19i1KhRbN++nZkzZ9K9e3cOP/xwXn75Zfr06cOUKVN45513GDt2LJ06dWpx39VXX82FF17Irl27OP300zn88MOz+Ff4dNksth2yWezeOlKz2KqSZa0+9q0d/9nqY20Wq0wdSLNYn0FJklLJgJKUem3hTo/270A/RwNKUqrl5eVRX19vSLVxMUbq6+vJy8vL+BgXSUhKtR49erBp0ya2bt2a61L0CeXl5dGjR4+MxxtQklKtU6dO9O7dO9dlKAe8xSdJSiUDSpKUSgaUJCmVDChJUioZUJKkVDKgJEmp5DLzLDvx5hNbfexfpv0lwUokqW1JfAYVQsgLIawMITwVQrg1hBA+Zuy/hRAeTLoGSVLbl40ZVCmwKcY4PoSwEhgN/L/mg0IIRwNlgF8Pl5QVn6iT/dXjEqxErZGNZ1AjgQcat6uAEfsY92NgYRauL0lqB7IRUF2BnY3bu4DPNR8QQrgAeAp4Zl8nCSGUhxBqQwi19uCSpI4nGwG1Dchv3M5vfN3ceGAU8CtgYAjhfzcfEGNcHmMsijEWdevWLQtlSpLSLBsBtQYY07g9Enio+YAY4wUxxmJgMvBEjPEnWahDktSGZSOgbgO6hxDWA9uBF0II12XhOpKkdizxVXwxxrdpuIX3YfP2MXYD8L+SrkGS1PbZSUKSlEoGlCQplQwoSVIqGVCSpFQyoCRJqWQ380xU5O9/zL707plcHZLUgTiDkiSlkgElSUolA0qSlEoGlCQplQwoSVIqGVCSpFQyoCRJqWRASZJSyYCSJKXSAQVUCCE/hNA5W8VIkvSBjAIqhDAlhPDfwDpgZgjh2uyWJUnq6DKdQc0BTgG2xBhvAE7PXkmSJGUeUK8DwwBCCEcDr2WtIkmSyDygyoF/A/4FuB6YlbWKJEkiw5/biDE+D3z9g9chhEOzVpEkSWS+SGJps13/lYVaJElq8rEzqBBCF6AAKA4hfPDLe0cA72e7MElSx7a/W3wjgIlAT6ACCMAbNDyPkiQpaz42oGKMdwF3hRBWxxhnfEo1SZKU2TOoGOMZH34dQjgqO+VIktQgo1V8IYT/AM4CDm/ctRsozFZRkiRl+j2o04FTgUeBk4AtWatIkiQyD6h3gZNpmEGdBHTPVkGSJEHmAXUB8DZwOfCvNKzokyQpazLtJPEK8Erjy6n7GhdCyAN+A3wRWA9MjTHGZmMOAW4H/idQ5+pASVJLMu0kcV+G5ysFNsUYC2n4gu/oFsZMBJ6KMQ4HvhBCODnDc0uSOpBMb/H9OYRwVgbjRgIPNG5X0fBF3+ZWAf/ZOJP6H8CuDGuQJHUgGd3io+GnNi5p/NHC14EYYxzZwriuwM7G7V1Av+YDYoy7AUIINcDmGOOLLV0whFBOQxd1evbs2dIQSVI7lukzqJZmQi3ZBuQ3buc3vt5LCKErDd+jOhWoCiGMiDE+1MI1lwPLAYqKimLzf5ek9ubZ409o9bEnPPdsgpWkQ6a3+DK1BhjTuD0S+EjwAJcC58YY36Ohr1/nhGuQJLUDSQfUbUD3EMJ6YDvwQgjhumZjlgEzQgjrgHpgdcI1SJLagUyfQWUkxvg2ML7Z7nnNxrxEw+xKkqR9SnoGJUlSIgwoSVIqGVCSpFQyoCRJqWRASZJSyYCSJKVSosvMJUltz9JvNP92UGYuvWNlwpXszRmUJCmVDChJUioZUJKkVDKgJEmpZEBJklLJgJIkpZIBJUlKJQNKkpRKBpQkKZUMKElSKhlQkqRUMqAkSalkQEmSUsmAkiSlkgElSUolA0qSlEoGlCQplQwoSVIqGVCSpFQyoCRJqWRASZJSyYCSJKWSASVJSiUDSpKUSokGVAghL4SwMoTwVAjh1hBCaGFMCCHcHEJ4NIRwdwjhkCRrkCS1D0nPoEqBTTHGQqAAGN3CmOHAITHGoUAXYEzCNUiS2oGkA2ok8EDjdhUwooUxW4AfN27v2deJQgjlIYTaEELt1q1bk61SkpR6SQdUV2Bn4/Yu4HPNB8QYn48xPhZC+DrwGWB1SyeKMS6PMRbFGIu6deuWcJmSpLRLOqC2AfmN2/mNrz8ihHAm8B1gQozxvYRrkCS1A0kH1Br++UxpJPBQ8wEhhKOAfwfGxRhfS/j6kqR2IumAug3oHkJYD2wHXgghXNdszDTgC8DqEMLaEMKMhGuQJLUDiS7xjjG+DYxvtnteszHXANckeV1JUvvjF3UlSalkQEmSUsmAkiSlkgElSUolA0qSlEo2atVeln6j+SLMzF16x8oEK5HU0TmDkiSlkgElSUolA0qSlEoGlCQplQwoSVIqGVCSpFQyoCRJqWRASZJSyYCSJKWSASVJSiUDSpKUSvbik6SWVOS38ridydbRgTmDkiSlkgElSUolA0qSlEoGlCQplQwoSVIqGVCSpFQyoCRJqWRASZJSyYCSJKWSASVJSiUDSpKUSgaUJCmVEm0WG0LIA34DfBFYD0yNMcYWxnUCVsQYJyR5fUnKtRNvPrHVx96ZYB3tQdIzqFJgU4yxECgARjcfEELoDDzR0r9JkvSBpANqJPBA43YVMKL5gBjjmzHGk4BNCV9bktSOJB1QXYEPfgxlF/C51p4ohFAeQqgNIdRu3bo1keIkSW1H0gG1DfjgV77yG1+3SoxxeYyxKMZY1K1bt0SKkyS1HUkH1BpgTOP2SOChhM8vSeogkg6o24DuIYT1wHbghRDCdQlfQ5LUASS6zDzG+DYwvtnuefsY2yfJa0uS2he/qCtJSiUDSpKUSgaUJCmVEn0GlWa9Ftzb6mM35CVYyAF49vgTWndgybJkC5GkHHAGJUlKJQNKkpRKBpQkKZUMKElSKhlQkqRUMqAkSalkQEmSUsmAkiSlkgElSUolA0qSlEodptWRJLVny75dlesSEucMSpKUSgaUJCmVDChJUioZUJKkVDKgJEmpZEBJklLJgJIkpZIBJUlKJQNKkpRKBpQkKZUMKElSKhlQkqRUMqAkSalkQEmSUsmAkiSlUqIBFULICyGsDCE8FUK4NYQQWjNGkqSkZ1ClwKYYYyFQAIxu5RhJUgeXdECNBB5o3K4CRrRyjCSpgwsxxuROFsJq4NoY44MhhIuAQTHGbx3omMZx5UB548t+QF1ihabH54FtuS5COeFn33H52X/U0THGbs13HpLwRbYB+Y3b+bT8IWQyhhjjcmB5wvWlSgihNsZYlOs69Onzs++4/Owzl/QtvjXAmMbtkcBDrRwjSergkg6o24DuIYT1wHbghRDCdfsZsybhGiRJ7UCit/hijG8D45vtnpfBmI6qXd/C1Mfys++4/OwzlOgiCUmSkmInCUlSKhlQkqRUMqBywHZPHVsIoVMI4Z5c16FPV2hwcwjh0RDC3SGEpL/m0+4YULlhu6cOKoTQGXgCP/OOaDhwSIxxKNCFf37dRvtgQOWG7Z46qBjjmzHGk4BNua5Fn7otwI8bt/fkspC2wilmbnQFdjZu76KhlZOkdizG+DxACOHrwGeA1bmtKP2cQeVGRu2eJLUvIYQzge8AE2KM7+W6nrQzoHLDdk9SBxNCOAr4d2BcjPG1XNfTFhhQuWG7J6njmQZ8AVgdQlgbQpiR64LSzk4SkqRUcgYlSUolA0qSlEoGlCQplQwoSVIqGVCSpFQyoCRJqfT/AcyKXz25r5nzAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "labels=['0','1','2']\n",
    "men_means=[20,34,30,35,37]\n",
    "women_means=[25,32,34,20,25]\n",
    "w_means=[10,20,30,40,50]\n",
    "#x轴是由[1,2,3,4,5]组成\n",
    "x=np.arange(len(labels))\n",
    "x*=3\n",
    "width = 0.35\n",
    " \n",
    " \n",
    "fig,ax  = plt.subplots()\n",
    "#先画第一个矩形\n",
    "rects1=ax.bar(x-2*width,dfsres2['Fresh'],width,label='Fresh')\n",
    "rects2=ax.bar(x-width,dfsres2['Milk'],width,label='Milk')\n",
    "rects3 = ax.bar(x,dfsres2['Grocery'],width,label='Grocery')\n",
    "rects4=ax.bar(x+width,dfsres2['Frozen'],width,label='Frozen')\n",
    "rects5=ax.bar(x+2*width,dfsres2['Detergents_Paper'],width,label='Detergents_Paper')\n",
    "rects6 = ax.bar(x+3*width,dfsres2['Delicassen'],width,label='Delicassen')\n",
    "#设置图像的一些参数\n",
    "ax.set_ylabel('rate')\n",
    "ax.set_title('')\n",
    "ax.set_xticks(x)\n",
    "ax.set_xticklabels(labels)\n",
    "ax.legend()\n",
    "#为图像加上标签\n",
    "#rect.get_height()是获取当前的高度，比如蓝色的第一条高度就是20\n",
    "#rect.get_x()获取当前矩形的起始x轴的位置\n",
    "def autolabel(rects):\n",
    "    for rect in rects:\n",
    "        height = rect.get_height()\n",
    "        #annotate函数是用来对图像进行标注，\n",
    "        #参数xy表示标注位置\n",
    "        # xytext表示文本位置（在xy的位置进行多少偏移）\n",
    "        ax.annotate('{}'.format(height),\n",
    "                    xy=(rect.get_x()+rect.get_width()/2,height),\n",
    "                    xytext=(0,2),\n",
    "                    textcoords='offset points',\n",
    "                    ha = 'center',\n",
    "                    va = 'bottom')\n",
    "\n",
    "#tight_layout()，作用是自动调整子图参数，使之填充整个图像区域。\n",
    "fig.tight_layout()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "thermal-literacy",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
